/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Entity.*;
import Model.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import library.Koneksi;
import library.NamaLab;
import library.StatusSidang;


/**
 *
 * @author mr2
 */
public class PendaftaranSidangTALogic{
    HttpServletRequest request;

    public PendaftaranSidangTALogic(HttpServletRequest request) {
        this.request = request;
    }
    
    public String formDataTA(){
        
        HttpSession session = request.getSession();
        String idUser = (String) session.getAttribute("id_user");
        
        ArrayList ListRole = new ArrayList();
        ListRole = (ArrayList) session.getAttribute("role");
        
        boolean bukanRole = true;
        if (session.getAttribute("role") != null) {
            for (int i = 0; i < ListRole.size(); i++) {
                if ((ListRole.get(i).equals("mahasiswa"))) {
                    bukanRole = false;
                }
            }
        }
        
        if (session.getAttribute("role") == null) {
            return "login";
        } else if (bukanRole) {
            request.setAttribute("menu", "");
            request.setAttribute("submenu", "");
            return "AccessDenied";
        }else {
            User user = new User();
            user.setIdUser(idUser);

            TAModel statusta = new TAModel();
            int idTA = statusta.getIdTA(user);

            TA ta = new TA();
            ta.setIdTA(idTA);

            TA detailDataTA = statusta.getDetailDataTA(ta);

            DosenModel pembimbing = new DosenModel();
            List<Dosen> pembimbing1 = pembimbing.ListPembimbing1();
            List<Dosen> pembimbing2 = pembimbing.ListPembimbing();

            NamaLab namaLab = new NamaLab();
            List<NamaLab> listlab = namaLab.ListLab();        

            request.setAttribute("idUser", idUser);
            request.setAttribute("idTA", idTA);
            request.setAttribute("detailDataTA", detailDataTA);
            request.setAttribute("pembimbing1", pembimbing1);
            request.setAttribute("pembimbing2", pembimbing2);
            request.setAttribute("listlab", listlab);
            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "dataTA");
//            return "/login";
            return "monta/Mhs_form_data_ta.jsp";
        }
        
        
    }
    
    public String inputDataTA() {
    
            String nrp = request.getParameter("idUser");
            String judul = request.getParameter("judul");
            String pembimbing1 = request.getParameter("pembimbing1");
            String pembimbing2 = request.getParameter("pembimbing2");
            String pembimbingLuar = request.getParameter("pembimbingLuar");
            String namaLab = request.getParameter("namaLab");
            
            TA ta = new TA();
            User user = new User();
            
            user.setIdUser(nrp);
            ta.setUser(user);
            ta.setJudul(judul);
            ta.setPembimbing1(pembimbing1);
            ta.setPembimbing2(pembimbing2);
            ta.setPembimbingLuar(pembimbingLuar);
            ta.setNamaLab(namaLab);
            
            TAModel dataTA = new TAModel();
            
            try {
                dataTA.inputDataTA(ta);
            } catch (Exception ex) {
                System.out.println(ex.getMessage());        
            }
            
            return formDataTA();
    }
    
    public String StatusTAMahasiswa(){
        
        String idUser = null;
        String role = null;
        
        HttpSession session = request.getSession();
        ArrayList listRole = new ArrayList();
        listRole = (ArrayList)session.getAttribute("role");
        
        boolean bukanRole = true;
        if (session.getAttribute("role") != null) {
            for (int i = 0; i < listRole.size(); i++) {
                if ((listRole.get(i).equals("mahasiswa") || listRole.get(i).equals("dosen") || listRole.get(i).equals("koordinator_ta"))) {
                    bukanRole = false;
                }
            }
        }
        
        if (session.getAttribute("role") == null) {
            return "login";
        } else if (bukanRole) {
            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "");
            return "AccessDenied";
        }else {
            for(int count = 0; count < listRole.size(); count++){
                role = (String)listRole.get(count);          
            }
                idUser = request.getParameter("idUser");
            System.out.println(role);
            if(role.equals("mahasiswa")){
                idUser = (String) session.getAttribute("id_user");
            }else {
                idUser = request.getParameter("idUser");
            }


            String jenisSidang = request.getParameter("jenisSidang");


            User user = new User();
            user.setIdUser(idUser);
            System.out.println(" test "+user.getIdUser());

            TA ta = new TA();
            SidangTAModel infoTA = new SidangTAModel();
            TAModel detailTA = new TAModel();
            

            /*ambil idTA yang aktif dari idUser miliki user*/
            int idTA = detailTA.getIdTA(user);
            System.out.println(idTA);

            /*untuk memeriksa apakah user udah daftar proposal apa belum maka di cek
            *apakah user udah punya idTA yang aktif atau tidak di tabel ta_proposal
            */

            ta.setIdTA(idTA);
            String statusDaftarProposal = infoTA.getStatusDaftarProposal(ta);
            System.out.println(statusDaftarProposal);

            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "statusTA");

            if(idTA != 0){

                Sidang sidang = new Sidang();
                sidang.setJenisSidang(jenisSidang);
                sidang.setTa(ta);

                SidangTAModel statusTA = new SidangTAModel();
                TA detailDataTA = detailTA.getDetailDataTA(ta);
                Sidang detailSidang = statusTA.getDetailSidang(sidang);
                String tglProposal = statusTA.getTglProposalDiterima(ta);
                String tglFinal = statusTA.getTglFinalDiterima(ta);
                
                System.out.println("tgl proposal diterima = "+tglProposal);
                System.out.println("tgl final diterima = "+tglFinal);
                System.out.println(ta.getIdTA());

                double lamaPengerjaan = statusTA.statusLamaPengerjaan(ta, tglProposal, tglFinal);
                int jlhBimbingan = statusTA.statusJlhBimbingan(ta);

                DosenModel dosen = new DosenModel();
                List<Dosen> listPembimbing1 = dosen.ListPembimbing1();
                List<Dosen> listPembimbing2 = dosen.ListPembimbing();
                List<Dosen> listPenguji1 = dosen.ListPenguji1(detailTA.getDetailDataTA(ta).getPembimbing1());
                List<Dosen> listPenguji2 = dosen.ListPenguji2(detailTA.getDetailDataTA(ta).getPembimbing2());

                StatusSidang statusSidang = new StatusSidang();
                List<StatusSidang> listStatusProposal = statusSidang.StatusSidangProposal();
                List<StatusSidang> listStatusProgress = statusSidang.StatusSidangProgress();
                List<StatusSidang> listStatusFinal = statusSidang.StatusSidangFinal();

                request.setAttribute("idUser", idUser);
                request.setAttribute("jenisSidang",jenisSidang);
                request.setAttribute("listStatusProposal", listStatusProposal);
                request.setAttribute("listStatusProgress", listStatusProgress);
                request.setAttribute("listStatusPFinal", listStatusFinal);
                request.setAttribute("listPembimbing1", listPembimbing1);
                request.setAttribute("listPembimbing2", listPembimbing2);
                request.setAttribute("listPenguji1", listPenguji1);
                request.setAttribute("listPenguji2", listPenguji2);
                request.setAttribute("detailDataTA", detailDataTA);
                request.setAttribute("detailSidang", detailSidang);
                request.setAttribute("lamaPengerjaan", lamaPengerjaan);
                request.setAttribute("jlhBimbingan", jlhBimbingan);

                return "monta/StatusTAMhs.jsp";
            }else{
                request.setAttribute("idUser", idUser);
                return "monta/StatusTAHidden.jsp";
            }
        }    
    }
    
    public String FormDaftarSidang(){
        
        HttpSession session = request.getSession();
        ArrayList listRole = new ArrayList();
        listRole = (ArrayList)session.getAttribute("role");
        
        boolean bukanRole = true;
        if (session.getAttribute("role") != null) {
            for (int i = 0; i < listRole.size(); i++) {
                if ((listRole.get(i).equals("mahasiswa"))) {
                    bukanRole = false;
                }
            }
        }
        
        if (session.getAttribute("role") == null) {
            return "login";
        } else if (bukanRole) {
            request.setAttribute("menu", "");
            request.setAttribute("submenu", "");
            return "AccessDenied";
        }else {
            String idUser = (String) session.getAttribute("id_user");
        
            request.setAttribute("idUser", idUser);
            String halaman = "";

            User user = new User();
            user.setIdUser(idUser);


            
            SidangTAModel sidangta = new SidangTAModel();
            TAModel detailTA = new TAModel();
            
            //Mengambil idTA
            int idTA = detailTA.getIdTA(user);

            TA ta = new TA();
            ta.setIdTA(idTA);
            
            //melihat status daftar proposal
            String DaftarProposal = sidangta.getStatusDaftarProposal(ta);
            
            //melihat status daftar final
            String DaftarFinal = sidangta.getStatusDaftarFinal(ta);
            System.out.println(DaftarFinal);
            
            //melihat status sidang proposal
            String SidangProposal = sidangta.getStatusSidangProposal(ta);

            //melihat status sidang final
            String SidangFinal = sidangta.getStatusSidangFinal(ta);

            //Mengambil detail data TA Mahasiswa
            TA dataTA = detailTA.getDetailDataTA(ta);
            request.setAttribute("dataTA", dataTA);

            //Mengambil list kandidat dosen Pembimbing 1 dan Pembimbing 2
            DosenModel dosen = new DosenModel();
            List<Dosen> pembimbing1 = dosen.ListPembimbing1();
            List<Dosen> pembimbing2 = dosen.ListPembimbing();
            request.setAttribute("pembimbing1", pembimbing1);
            request.setAttribute("pembimbing2", pembimbing2);


            //Mengambil list nama lab
            NamaLab namaLab = new NamaLab();
            List<NamaLab> listlab = namaLab.ListLab();
            request.setAttribute("listlab", listlab);
            
            //mengeset konten menu
            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "pendaftaranSidang");

            if(idTA != 0 && idUser != null){
                if(DaftarFinal.equals("SUDAH DAFTAR FINAL")){
                    if(SidangFinal.equals("LULUS") || SidangFinal.equals("LULUS DENGAN REVISI")){
                        halaman = "monta/Mhs_lulus_TA.jsp";
                    }else{
                        if(SidangFinal.equals("SIDANG ULANG")){
                            halaman = "monta/Mhs_form_daftar_final.jsp";
                        }else{
                            halaman = "monta/Mhs_sukses_daftar_final.jsp";
                        }        
                    }
                }else{
//                    
                    if(SidangProposal.equals("DITERIMA") || SidangProposal.equals("DITERIMA DENGAN REVISI")){
                        halaman = "monta/Mhs_form_daftar_final.jsp";
                    }else{
                        if(DaftarProposal.equals("SUDAH DAFTAR PROPOSAL")){
                            halaman = "monta/Mhs_sukses_daftar_proposal.jsp";
                        }else{
                            halaman = "monta/Mhs_form_daftar_proposal.jsp";
                        }
                    }
                }
            }else{
                halaman = "monta/Mhs_daftarSidang_hidden.jsp";
            }
                return halaman;
        }
    }
    
    //Logic menjalankan proses daftar proposal
    public String daftarProposal() {
            
        String id_TA = request.getParameter("idTA");

            if(id_TA != null){
                int idTA = Integer.parseInt(id_TA);
            TA ta = new TA();

            ta.setIdTA(idTA);

            SidangTAModel daftar = new SidangTAModel();

            daftar.DaftarSidangProposal(ta);
            
            return "SidangTAController?page=formDaftarSidang";
        }else{
            return "SidangTAController?page=formDaftarSidang";    
        }
    }
    
    //Logic menjalankan proses daftar progress
//    public String daftarProgress() {
//        
//        String id_TA = request.getParameter("idTA");
//        
//        if(id_TA != null){
//            TA ta = new TA();
//            int idTA = Integer.parseInt(id_TA);
//            ta.setIdTA(idTA);
//
//            SidangTAModel daftar = new SidangTAModel();
//
//            daftar.DaftarSidangProgress(ta);
//
//            return "SidangTAController?page=formDaftarSidang";
//        }else{
//            return "SidangTAController?page=formDaftarSidang";
//        }
//    }
    
    //Logic menjalankan proses daftar progress
    public String daftarFinal() {
        
        String id_TA = request.getParameter("idTA");
        
        if(id_TA != null){
            TA ta = new TA();
            int idTA = Integer.parseInt(id_TA);
            ta.setIdTA(idTA);

            SidangTAModel daftar = new SidangTAModel();

            daftar.DaftarSidangFinal(ta);

            return "SidangTAController?page=formDaftarSidang";
        }else{
            return "SidangTAController?page=formDaftarSidang";
        }
        
    }
   
    //Logic menampilkan halaman list pendaftar sidang di akun koorTA (monta/KoorTA_list_pendaftar_sidang.jsp)
    public String ListPendaftarSidang(){
        HttpSession session = request.getSession();
        ArrayList listRole = new ArrayList();
        listRole = (ArrayList)session.getAttribute("role");
        
        boolean bukanRole = true;
        if (session.getAttribute("role") != null) {
            for (int i = 0; i < listRole.size(); i++) {
                if ((listRole.get(i).equals("koordinator_ta"))) {
                    bukanRole = false;
                }
            }
        }
        
        if (session.getAttribute("role") == null) {
            return "login";
        } else if (bukanRole) {
            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "");
            return "AccessDenied";
        }else {
            String jenisSidang = request.getParameter("jenisSidang");
            String pesan = request.getParameter("pesan");
            String idUser = request.getParameter("idUser");
            SidangTAModel ListPendaftar = new SidangTAModel();

            System.out.println("jenis Sidang list = "+jenisSidang);
            System.out.println("pesan = "+pesan);

            List<Sidang> listPendaftar = ListPendaftar.ListPendaftarSidang(jenisSidang);

            request.setAttribute("listPendaftar", listPendaftar);
            request.setAttribute("jenisSidang", jenisSidang);
            request.setAttribute("pesan", pesan);
            request.setAttribute("idUser", idUser);
            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "pendaftarSidang");

            if(jenisSidang != null){
                return "monta/KoorTA_list_pendaftar_sidang.jsp";
            }else{
                return "monta/KoorTA_list_pendaftar_sidang.jsp";           
            }   
        }                  
    }
    
    //Logic menampilkan form berisi detail pendaftar sidang
    public String KoorTADetailPendaftarSidang(){
        
        String jenisSidang = request.getParameter("jenisSidang");
        request.setAttribute("jenisSidang", jenisSidang);
        
        String id_TA = request.getParameter("idTA");
        int idTA = Integer.parseInt(id_TA);
        User user = new User();
        TA ta = new TA();
        
        TAModel detailTA = new TAModel();
        
        ta.setIdTA(idTA);
        
        TA detailPendaftar = detailTA.getDetailDataTA(ta);
        request.setAttribute("detailPendaftar", detailPendaftar);
        
        //Mengambil list kandidat dosen Pembimbing 1 dan Pembimbing 2
        DosenModel dosen = new DosenModel();
        List<Dosen> listPembimbing1 = dosen.ListPembimbing1();
        List<Dosen> listPembimbing2 = dosen.ListPembimbing();
        request.setAttribute("listPembimbing1", listPembimbing1);
        request.setAttribute("listPembimbing2", listPembimbing2);
        
        
        
        NamaLab namaLab = new NamaLab();
        List<NamaLab> listlab = namaLab.ListLab();
        request.setAttribute("listlab", listlab);
        
        request.setAttribute("menu", "monitoringTA");
        request.setAttribute("submenu", "pendaftarSidang");
        
        return "monta/KoorTA_detail_pendaftar_sidang.jsp";
    }
    
    //Logic untuk melakukan perubahan data pendaftar sidang
    public String UpdateDataPendaftarSidang(){
        
        String id_TA = request.getParameter("idTA");
        
        if(id_TA != null){
            int idTA = Integer.parseInt(id_TA);

            String idUser = request.getParameter("idUser");
            String judul = request.getParameter("judul");
            String pembimbing1 = request.getParameter("Pembimbing1");
            String pembimbing2 = request.getParameter("Pembimbing2");
            String pembimbingLuar = request.getParameter("pembimbingLuar");
            String lab = request.getParameter("lab");
            String jenisSidang = request.getParameter("jenisSidang");
            String pesan = null;

            TA ta = new TA();
            TAModel update = new TAModel();

            ta.setIdTA(idTA);
            ta.setJudul(judul);
            ta.setPembimbing1(pembimbing1);
            ta.setPembimbing2(pembimbing2);
            ta.setPembimbingLuar(pembimbingLuar);
            ta.setNamaLab(lab);

            boolean updateDataPendaftar = update.updateDataTA(ta);

            if(updateDataPendaftar){
                pesan = "sukses";
            }else{
                pesan = "gagal";
            }        
        
            return "SidangTAController?page=listPendaftarSidang&&pesan="+pesan;
        }else{
            return "SidangTAController?page=listPendaftarSidang";
        }     
        
    }
    
    //Logic untuk melakukan perubahan dan persetujuan pendaftaran sidang
    public String persetujuanPendaftarSidang(){
        
        User user = new User();
        TA ta = new TA();
        Sidang sidang = new Sidang();
        
        String id_Sidang = request.getParameter("idSidang");
        String idUser = request.getParameter("idUser");
        String jenisSidang = request.getParameter("jenisSidang");
        String statusDaftarSidang = request.getParameter("statusDaftarSidang");
        
        if(id_Sidang != null){
            System.out.println("jenis sidang = "+jenisSidang);
            System.out.println("id user = "+idUser);

            SidangTAModel statusDaftar = new SidangTAModel();

            user.setIdUser(idUser);
            ta.setUser(user);
            sidang.setTa(ta);
            sidang.setJenisSidang(jenisSidang);

            int idSidang = Integer.parseInt(id_Sidang);

            sidang.setIdSidang(idSidang);
            sidang.setStatusDaftarSidang(statusDaftarSidang);

            statusDaftar.persetujuanPendaftar(sidang);
        }
            
        return ListPendaftarSidang();
    }
    
    public String rekapPendaftarFinal(){
         
        HttpSession session = request.getSession();
        ArrayList ListRole = new ArrayList();
        ListRole = (ArrayList) session.getAttribute("role");
        
        boolean bukanRole = true;
        if (session.getAttribute("role") != null) {
            for (int i = 0; i < ListRole.size(); i++) {
                if ((ListRole.get(i).equals("tu_akademik"))) {
                    bukanRole = false;
                }
            }
        }
        
        if (session.getAttribute("role") == null) {
            return "login";
        } else if (bukanRole) {
            request.setAttribute("menu", "monitoringTA");
            request.setAttribute("submenu", "");
            return "AccessDenied";
        }else {
            
            String namaLab = request.getParameter("namaLab");
            String periodeGet = request.getParameter("periode");
            String format = request.getParameter("format");
            
            NamaLab lab = new NamaLab();
            List<NamaLab> listlab = lab.ListLab();
            
            YudisiumModel list = new YudisiumModel();
            List<Yudisium> periodeYudisium = list.ListYudisium(0);

            if(periodeGet != null){
                String[] token = periodeGet.split(",");
                String periode = token[2];
                request.setAttribute("periode", periode);
                
                TA ta = new TA();
                ta.setNamaLab(namaLab);

                SidangTAModel Jadwal = new SidangTAModel();
                List<Sidang> rekapJadwalFinal = Jadwal.RekapPendaftarFinal(ta, periodeGet);
                request.setAttribute("rekapJadwalFinal", rekapJadwalFinal);
            }
                DosenModel dosen = new DosenModel();
                List<Dosen> namaDosen = dosen.ListPembimbing();

                request.setAttribute("listlab", listlab);
                request.setAttribute("namaLab", namaLab);
                request.setAttribute("namaDosen", namaDosen);
                request.setAttribute("periodeGet", periodeGet);
                request.setAttribute("periodeYudisium", periodeYudisium);
                request.setAttribute("format", format);
                request.setAttribute("menu", "monitoringTA");
                request.setAttribute("submenu", "rekapJadwalFinal");
            
            if("EXCEL".equals(format)){
                return "monta/TU_cetak_pendaftar_final.jsp";
            }else{
                return "monta/TU_rekap_pendaftar_final.jsp";
            }    
        } 
    } 
}
